
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>如何在 JVM 新生代垃圾回收中避免进行全堆扫描？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>如何在 JVM 新生代垃圾回收中避免进行全堆扫描？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">JVM的新生代是如何通过“分区式垃圾回收”策略来避免对整个堆进行扫描的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">新生代被划分为Eden区和Survivor区。垃圾回收过程只在新生代内部进行，新对象最初分配在Eden区，存活下来的对象则移至Survivor区。通过这种分区策略，JVM可以局部处理新生代的垃圾回收，从而避免了全堆扫描。</div>
          </div>
          <div class="card-source">来源: 文档中「1. 分区式垃圾回收（Generational Garbage Collection）」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">什么是“卡表”（Card Table），它在新生代垃圾回收中扮演了什么角色？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">卡表是一种数据结构，用于记录新生代中哪些内存区域被修改。当新生代中的对象被引用或修改时，对应的卡表条目就会被更新。垃圾回收器通过检查卡表，就能确定哪些内存区域需要被扫描，从而避免对整个堆进行扫描。</div>
          </div>
          <div class="card-source">来源: 文档中「2. 卡表（Card Table）」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">“写屏障”（Write Barrier）机制如何帮助优化新生代垃圾回收的效率？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">写屏障是一种用于跟踪对象在垃圾回收过程中被修改情况的机制。它会记录对象的修改，使得垃圾回收器在标记阶段可以只关注那些被修改过的区域，进而减少了需要扫描的内存范围。</div>
          </div>
          <div class="card-source">来源: 文档中「3. 写屏障（Write Barrier）」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">“分代收集算法”的核心思想是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">分代收集算法的核心思想是将堆内存分为新生代和老年代，并且新生代的垃圾回收只处理新生代中的对象。这种方法通过只关注新生代中的活动对象，有效地避免了对整个堆的扫描。</div>
          </div>
          <div class="card-source">来源: 文档中「4. 分代收集算法」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">“增量标记”（Incremental Marking）是如何工作的，它对避免全堆扫描有什么作用？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">增量标记将完整的标记过程分解为多个小步骤执行，而不是一次性扫描整个堆。这种方式通过分步进行标记，有助于避免（或减少）因一次性扫描整个堆而造成的长时间停顿。</div>
          </div>
          <div class="card-source">来源: 文档中「5. 增量标记（Incremental Marking）」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">JVM是如何通过优化“虚拟内存管理”来减少全堆扫描的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">一些JVM实现会通过调整堆的布局和分配策略来优化虚拟内存管理。这样可以确保新生代的垃圾回收操作尽可能地被局限在新生代区域内，从而减少对整个堆进行扫描的需求。</div>
          </div>
          <div class="card-source">来源: 文档中「6. 虚拟内存管理」部分</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
